{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "cellular-prime",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np \n",
    "import matplotlib.pyplot as plt\n",
    "import gc\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "grand-endorsement",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Dst Port</th>\n",
       "      <th>Protocol</th>\n",
       "      <th>Timestamp</th>\n",
       "      <th>Flow Duration</th>\n",
       "      <th>Tot Fwd Pkts</th>\n",
       "      <th>Tot Bwd Pkts</th>\n",
       "      <th>TotLen Fwd Pkts</th>\n",
       "      <th>TotLen Bwd Pkts</th>\n",
       "      <th>Fwd Pkt Len Max</th>\n",
       "      <th>Fwd Pkt Len Min</th>\n",
       "      <th>...</th>\n",
       "      <th>Fwd Seg Size Min</th>\n",
       "      <th>Active Mean</th>\n",
       "      <th>Active Std</th>\n",
       "      <th>Active Max</th>\n",
       "      <th>Active Min</th>\n",
       "      <th>Idle Mean</th>\n",
       "      <th>Idle Std</th>\n",
       "      <th>Idle Max</th>\n",
       "      <th>Idle Min</th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>443</td>\n",
       "      <td>6</td>\n",
       "      <td>02/03/2018 08:47:38</td>\n",
       "      <td>141385</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "      <td>553</td>\n",
       "      <td>3773.0</td>\n",
       "      <td>202</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>20</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>49684</td>\n",
       "      <td>6</td>\n",
       "      <td>02/03/2018 08:47:38</td>\n",
       "      <td>281</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>38</td>\n",
       "      <td>0.0</td>\n",
       "      <td>38</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>20</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>443</td>\n",
       "      <td>6</td>\n",
       "      <td>02/03/2018 08:47:40</td>\n",
       "      <td>279824</td>\n",
       "      <td>11</td>\n",
       "      <td>15</td>\n",
       "      <td>1086</td>\n",
       "      <td>10527.0</td>\n",
       "      <td>385</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>20</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>443</td>\n",
       "      <td>6</td>\n",
       "      <td>02/03/2018 08:47:40</td>\n",
       "      <td>132</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>20</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>443</td>\n",
       "      <td>6</td>\n",
       "      <td>02/03/2018 08:47:41</td>\n",
       "      <td>274016</td>\n",
       "      <td>9</td>\n",
       "      <td>13</td>\n",
       "      <td>1285</td>\n",
       "      <td>6141.0</td>\n",
       "      <td>517</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>20</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 80 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Dst Port  Protocol            Timestamp  Flow Duration  Tot Fwd Pkts  \\\n",
       "0       443         6  02/03/2018 08:47:38         141385             9   \n",
       "1     49684         6  02/03/2018 08:47:38            281             2   \n",
       "2       443         6  02/03/2018 08:47:40         279824            11   \n",
       "3       443         6  02/03/2018 08:47:40            132             2   \n",
       "4       443         6  02/03/2018 08:47:41         274016             9   \n",
       "\n",
       "   Tot Bwd Pkts  TotLen Fwd Pkts  TotLen Bwd Pkts  Fwd Pkt Len Max  \\\n",
       "0             7              553           3773.0              202   \n",
       "1             1               38              0.0               38   \n",
       "2            15             1086          10527.0              385   \n",
       "3             0                0              0.0                0   \n",
       "4            13             1285           6141.0              517   \n",
       "\n",
       "   Fwd Pkt Len Min  ...  Fwd Seg Size Min  Active Mean  Active Std  \\\n",
       "0                0  ...                20          0.0         0.0   \n",
       "1                0  ...                20          0.0         0.0   \n",
       "2                0  ...                20          0.0         0.0   \n",
       "3                0  ...                20          0.0         0.0   \n",
       "4                0  ...                20          0.0         0.0   \n",
       "\n",
       "   Active Max  Active Min  Idle Mean  Idle Std  Idle Max  Idle Min   Label  \n",
       "0         0.0         0.0        0.0       0.0       0.0       0.0  Benign  \n",
       "1         0.0         0.0        0.0       0.0       0.0       0.0  Benign  \n",
       "2         0.0         0.0        0.0       0.0       0.0       0.0  Benign  \n",
       "3         0.0         0.0        0.0       0.0       0.0       0.0  Benign  \n",
       "4         0.0         0.0        0.0       0.0       0.0       0.0  Benign  \n",
       "\n",
       "[5 rows x 80 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_1 = pd.read_csv(\"data/Friday-02-03-2018_TrafficForML_CICFlowMeter.csv\")\n",
    "date_1.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "subjective-diagram",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign and bot Samples in Friday-02-03-2018 : 762384 and 286191\n"
     ]
    }
   ],
   "source": [
    "date_1[\"Label\"].value_counts().plot.bar(color = [\"g\",\"r\",\"b\"])\n",
    "plt.title('Total number of Benign and Malicious samples in the dataset')\n",
    "# plt.savefig(\"Visuals/ham_vs_spam.jpeg\" , bbox_inches='tight')\n",
    "plt.show()\n",
    "Benign = date_1[\"Label\"].value_counts()[0]\n",
    "Bot = date_1[\"Label\"].value_counts()[1]\n",
    "print(f\"Benign and bot Samples in Friday-02-03-2018 : {Benign} and {Bot}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bright-sculpture",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape of Friday-02-03-2018 data : (1048575, 80)\n"
     ]
    }
   ],
   "source": [
    "print(f\"Shape of Friday-02-03-2018 data : {date_1.shape}\")\n",
    "total_date_1 =  date_1.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "temporal-portuguese",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Delete Data frame Release Memory\n",
    "del date_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "after-multiple",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Dst Port</th>\n",
       "      <th>Protocol</th>\n",
       "      <th>Timestamp</th>\n",
       "      <th>Flow Duration</th>\n",
       "      <th>Tot Fwd Pkts</th>\n",
       "      <th>Tot Bwd Pkts</th>\n",
       "      <th>TotLen Fwd Pkts</th>\n",
       "      <th>TotLen Bwd Pkts</th>\n",
       "      <th>Fwd Pkt Len Max</th>\n",
       "      <th>Fwd Pkt Len Min</th>\n",
       "      <th>...</th>\n",
       "      <th>Fwd Seg Size Min</th>\n",
       "      <th>Active Mean</th>\n",
       "      <th>Active Std</th>\n",
       "      <th>Active Max</th>\n",
       "      <th>Active Min</th>\n",
       "      <th>Idle Mean</th>\n",
       "      <th>Idle Std</th>\n",
       "      <th>Idle Max</th>\n",
       "      <th>Idle Min</th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>16/02/2018 08:27:23</td>\n",
       "      <td>112640768</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>56300000</td>\n",
       "      <td>138.5929291</td>\n",
       "      <td>56300000</td>\n",
       "      <td>56300000</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>16/02/2018 08:30:12</td>\n",
       "      <td>112641773</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>56300000</td>\n",
       "      <td>263.7508294</td>\n",
       "      <td>56300000</td>\n",
       "      <td>56300000</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>35605</td>\n",
       "      <td>6</td>\n",
       "      <td>16/02/2018 08:26:55</td>\n",
       "      <td>20784143</td>\n",
       "      <td>23</td>\n",
       "      <td>44</td>\n",
       "      <td>2416</td>\n",
       "      <td>1344</td>\n",
       "      <td>240</td>\n",
       "      <td>64</td>\n",
       "      <td>...</td>\n",
       "      <td>20</td>\n",
       "      <td>2624734</td>\n",
       "      <td>0</td>\n",
       "      <td>2624734</td>\n",
       "      <td>2624734</td>\n",
       "      <td>9058214</td>\n",
       "      <td>0</td>\n",
       "      <td>9058214</td>\n",
       "      <td>9058214</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>16/02/2018 08:33:01</td>\n",
       "      <td>112640836</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>56300000</td>\n",
       "      <td>82.02438662</td>\n",
       "      <td>56300000</td>\n",
       "      <td>56300000</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>23</td>\n",
       "      <td>6</td>\n",
       "      <td>16/02/2018 08:27:59</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>20</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 80 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "  Dst Port Protocol            Timestamp Flow Duration Tot Fwd Pkts  \\\n",
       "0        0        0  16/02/2018 08:27:23     112640768            3   \n",
       "1        0        0  16/02/2018 08:30:12     112641773            3   \n",
       "2    35605        6  16/02/2018 08:26:55      20784143           23   \n",
       "3        0        0  16/02/2018 08:33:01     112640836            3   \n",
       "4       23        6  16/02/2018 08:27:59            20            1   \n",
       "\n",
       "  Tot Bwd Pkts TotLen Fwd Pkts TotLen Bwd Pkts Fwd Pkt Len Max  \\\n",
       "0            0               0               0               0   \n",
       "1            0               0               0               0   \n",
       "2           44            2416            1344             240   \n",
       "3            0               0               0               0   \n",
       "4            1               0               0               0   \n",
       "\n",
       "  Fwd Pkt Len Min  ... Fwd Seg Size Min Active Mean Active Std Active Max  \\\n",
       "0               0  ...                0           0          0          0   \n",
       "1               0  ...                0           0          0          0   \n",
       "2              64  ...               20     2624734          0    2624734   \n",
       "3               0  ...                0           0          0          0   \n",
       "4               0  ...               20           0          0          0   \n",
       "\n",
       "  Active Min Idle Mean     Idle Std  Idle Max  Idle Min   Label  \n",
       "0          0  56300000  138.5929291  56300000  56300000  Benign  \n",
       "1          0  56300000  263.7508294  56300000  56300000  Benign  \n",
       "2    2624734   9058214            0   9058214   9058214  Benign  \n",
       "3          0  56300000  82.02438662  56300000  56300000  Benign  \n",
       "4          0         0            0         0         0  Benign  \n",
       "\n",
       "[5 rows x 80 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_2 = pd.read_csv(\"data/Friday-16-02-2018_TrafficForML_CICFlowMeter.csv\", low_memory=False)\n",
    "date_2.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "trained-record",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DoS attacks-Hulk , Benign and DoS attacks SlowHTTPTest Samples in Friday-16-02-2018 : 461912 , 446772 and 139890\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "DoS attacks-Hulk            461912\n",
       "Benign                      446772\n",
       "DoS attacks-SlowHTTPTest    139890\n",
       "Name: Label, dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_2_cp = date_2.copy()\n",
    "date_2_cp = date_2_cp.drop(date_2_cp.index[999999])\n",
    "date_2_cp[\"Label\"].value_counts().plot.bar(color = [\"g\",\"r\",\"b\"])\n",
    "plt.title('Total number of Benign and Malicious samples in the dataset')\n",
    "# plt.savefig(\"Visuals/ham_vs_spam.jpeg\" , bbox_inches='tight')\n",
    "plt.show()\n",
    "\n",
    "DoS_attacks_Hulk         = date_2_cp[\"Label\"].value_counts()[0]\n",
    "Benign                   = date_2_cp[\"Label\"].value_counts()[1]\n",
    "DoS_attacks_SlowHTTPTest = date_2_cp[\"Label\"].value_counts()[2]\n",
    "\n",
    "print(f\"DoS attacks-Hulk , Benign and DoS attacks SlowHTTPTest Samples in Friday-16-02-2018 : {DoS_attacks_Hulk} , {Benign} and {DoS_attacks_SlowHTTPTest}\")\n",
    "date_2_cp[\"Label\"].value_counts()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "configured-wheel",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape of Friday-16-02-2018 data : (1048574, 80)\n"
     ]
    }
   ],
   "source": [
    "print(f\"Shape of Friday-16-02-2018 data : {date_2_cp.shape}\")\n",
    "total_date_2 =  date_2_cp.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "curious-fiction",
   "metadata": {},
   "outputs": [],
   "source": [
    "# for i in range(len(date_2.Label)):\n",
    "#     if date_2.Label[i] == \"Label\":\n",
    "#         print(i)\n",
    "# date_2.iloc[999995:1000005,:]\n",
    "# list(set(date_2.Label.to_numpy().tolist()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "interior-olympus",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Delete Dataframe, Release Memory\n",
    "del date_2,date_2_cp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "minute-american",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Dst Port</th>\n",
       "      <th>Protocol</th>\n",
       "      <th>Timestamp</th>\n",
       "      <th>Flow Duration</th>\n",
       "      <th>Tot Fwd Pkts</th>\n",
       "      <th>Tot Bwd Pkts</th>\n",
       "      <th>TotLen Fwd Pkts</th>\n",
       "      <th>TotLen Bwd Pkts</th>\n",
       "      <th>Fwd Pkt Len Max</th>\n",
       "      <th>Fwd Pkt Len Min</th>\n",
       "      <th>...</th>\n",
       "      <th>Fwd Seg Size Min</th>\n",
       "      <th>Active Mean</th>\n",
       "      <th>Active Std</th>\n",
       "      <th>Active Max</th>\n",
       "      <th>Active Min</th>\n",
       "      <th>Idle Mean</th>\n",
       "      <th>Idle Std</th>\n",
       "      <th>Idle Max</th>\n",
       "      <th>Idle Min</th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>22</td>\n",
       "      <td>6</td>\n",
       "      <td>23/02/2018 08:18:29</td>\n",
       "      <td>1532698</td>\n",
       "      <td>11</td>\n",
       "      <td>11</td>\n",
       "      <td>1179</td>\n",
       "      <td>1969</td>\n",
       "      <td>648</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>32</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>500</td>\n",
       "      <td>17</td>\n",
       "      <td>23/02/2018 08:17:45</td>\n",
       "      <td>117573855</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1500</td>\n",
       "      <td>0</td>\n",
       "      <td>500</td>\n",
       "      <td>500</td>\n",
       "      <td>...</td>\n",
       "      <td>8</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>58786927.5</td>\n",
       "      <td>2.375324e+07</td>\n",
       "      <td>75583006</td>\n",
       "      <td>41990849</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>500</td>\n",
       "      <td>17</td>\n",
       "      <td>23/02/2018 08:17:45</td>\n",
       "      <td>117573848</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1500</td>\n",
       "      <td>0</td>\n",
       "      <td>500</td>\n",
       "      <td>500</td>\n",
       "      <td>...</td>\n",
       "      <td>8</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>58786924.0</td>\n",
       "      <td>2.375325e+07</td>\n",
       "      <td>75583007</td>\n",
       "      <td>41990841</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>22</td>\n",
       "      <td>6</td>\n",
       "      <td>23/02/2018 08:19:55</td>\n",
       "      <td>1745392</td>\n",
       "      <td>11</td>\n",
       "      <td>11</td>\n",
       "      <td>1179</td>\n",
       "      <td>1969</td>\n",
       "      <td>648</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>32</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>500</td>\n",
       "      <td>17</td>\n",
       "      <td>23/02/2018 08:18:17</td>\n",
       "      <td>89483474</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>3000</td>\n",
       "      <td>0</td>\n",
       "      <td>500</td>\n",
       "      <td>500</td>\n",
       "      <td>...</td>\n",
       "      <td>8</td>\n",
       "      <td>4000364.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4000364</td>\n",
       "      <td>4000364</td>\n",
       "      <td>21370777.5</td>\n",
       "      <td>1.528092e+07</td>\n",
       "      <td>41989576</td>\n",
       "      <td>7200485</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 80 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Dst Port  Protocol            Timestamp  Flow Duration  Tot Fwd Pkts  \\\n",
       "0        22         6  23/02/2018 08:18:29        1532698            11   \n",
       "1       500        17  23/02/2018 08:17:45      117573855             3   \n",
       "2       500        17  23/02/2018 08:17:45      117573848             3   \n",
       "3        22         6  23/02/2018 08:19:55        1745392            11   \n",
       "4       500        17  23/02/2018 08:18:17       89483474             6   \n",
       "\n",
       "   Tot Bwd Pkts  TotLen Fwd Pkts  TotLen Bwd Pkts  Fwd Pkt Len Max  \\\n",
       "0            11             1179             1969              648   \n",
       "1             0             1500                0              500   \n",
       "2             0             1500                0              500   \n",
       "3            11             1179             1969              648   \n",
       "4             0             3000                0              500   \n",
       "\n",
       "   Fwd Pkt Len Min  ...  Fwd Seg Size Min  Active Mean  Active Std  \\\n",
       "0                0  ...                32          0.0         0.0   \n",
       "1              500  ...                 8          0.0         0.0   \n",
       "2              500  ...                 8          0.0         0.0   \n",
       "3                0  ...                32          0.0         0.0   \n",
       "4              500  ...                 8    4000364.0         0.0   \n",
       "\n",
       "   Active Max  Active Min   Idle Mean      Idle Std  Idle Max  Idle Min  \\\n",
       "0           0           0         0.0  0.000000e+00         0         0   \n",
       "1           0           0  58786927.5  2.375324e+07  75583006  41990849   \n",
       "2           0           0  58786924.0  2.375325e+07  75583007  41990841   \n",
       "3           0           0         0.0  0.000000e+00         0         0   \n",
       "4     4000364     4000364  21370777.5  1.528092e+07  41989576   7200485   \n",
       "\n",
       "    Label  \n",
       "0  Benign  \n",
       "1  Benign  \n",
       "2  Benign  \n",
       "3  Benign  \n",
       "4  Benign  \n",
       "\n",
       "[5 rows x 80 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_3 = pd.read_csv(\"data/Friday-23-02-2018_TrafficForML_CICFlowMeter.csv\")\n",
    "date_3.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "north-profit",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Benign              1048009\n",
       "Brute Force -Web        362\n",
       "Brute Force -XSS        151\n",
       "SQL Injection            53\n",
       "Name: Label, dtype: int64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_3[\"Label\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "statewide-uruguay",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign , Benign actual, Brute_Force_Web , Brute_Force_XSS and SQL_Injection Samples in Friday-23-02-2018 : 524, 1048009 , 362 , 151 and 53\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "color = [\"g\",\"r\",\"b\",\"y\"]\n",
    "\n",
    "Benign                   = int(date_3[\"Label\"].value_counts()[0]/2000)\n",
    "Benign_actual            = date_3[\"Label\"].value_counts()[0]\n",
    "Brute_Force_Web          = date_3[\"Label\"].value_counts()[1]\n",
    "Brute_Force_XSS          = date_3[\"Label\"].value_counts()[2]\n",
    "SQL_Injection            = date_3[\"Label\"].value_counts()[3]\n",
    "\n",
    "Attacks = [\"Benign\", \"Brute_Force_Web\", \"Brute_Force_XSS\", \"SQL_Injection\"]\n",
    "Nums = [Benign, Brute_Force_Web, Brute_Force_XSS, SQL_Injection]\n",
    "\n",
    "print(f\"Benign , Benign actual, Brute_Force_Web , Brute_Force_XSS and SQL_Injection Samples in Friday-23-02-2018 : {Benign}, {Benign_actual} , {Brute_Force_Web} , {Brute_Force_XSS} and {SQL_Injection}\")\n",
    "date_3[\"Label\"].value_counts()\n",
    "\n",
    "fig = plt.figure(figsize = (10, 5))\n",
    " \n",
    "# creating the bar plot\n",
    "plt.bar(Attacks, Nums, color=color,\n",
    "        width = 0.4)\n",
    " \n",
    "plt.xlabel(\"Number of Samples\")\n",
    "plt.ylabel(\"Exploitations / Attacks\")\n",
    "plt.title('Total number of Benign and Malicious samples in the dataset')\n",
    "plt.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "funded-sullivan",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape of Friday-23-02-2018 data : (1048575, 80)\n"
     ]
    }
   ],
   "source": [
    "print(f\"Shape of Friday-23-02-2018 data : {date_3.shape}\")\n",
    "total_date_3 =  date_3.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "naughty-motel",
   "metadata": {},
   "outputs": [],
   "source": [
    "del date_3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "focal-pound",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "14012"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gc.collect()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "seven-significance",
   "metadata": {},
   "outputs": [
    {
     "ename": "ParserError",
     "evalue": "Error tokenizing data. C error: Calling read(nbytes) on source failed. Try engine='python'.",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mParserError\u001b[0m                               Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-21-5d692cf53201>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdate_4\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"data/Thuesday-20-02-2018_TrafficForML_CICFlowMeter.csv\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlow_memory\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0mdate_4\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhead\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36mread_csv\u001b[0;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options)\u001b[0m\n\u001b[1;32m    608\u001b[0m     \u001b[0mkwds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkwds_defaults\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    609\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 610\u001b[0;31m     \u001b[0;32mreturn\u001b[0m \u001b[0m_read\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    611\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    612\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36m_read\u001b[0;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[1;32m    466\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    467\u001b[0m     \u001b[0;32mwith\u001b[0m \u001b[0mparser\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 468\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnrows\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    469\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    470\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36mread\u001b[0;34m(self, nrows)\u001b[0m\n\u001b[1;32m   1055\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnrows\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1056\u001b[0m         \u001b[0mnrows\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvalidate_integer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"nrows\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnrows\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1057\u001b[0;31m         \u001b[0mindex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolumns\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcol_dict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnrows\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1058\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1059\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mindex\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36mread\u001b[0;34m(self, nrows)\u001b[0m\n\u001b[1;32m   2059\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnrows\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2060\u001b[0m         \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2061\u001b[0;31m             \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_reader\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnrows\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2062\u001b[0m         \u001b[0;32mexcept\u001b[0m \u001b[0mStopIteration\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2063\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_first_chunk\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.8/site-packages/pandas/_libs/parsers.pyx\u001b[0m in \u001b[0;36mpandas._libs.parsers.TextReader.read\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.8/site-packages/pandas/_libs/parsers.pyx\u001b[0m in \u001b[0;36mpandas._libs.parsers.TextReader._read_rows\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.8/site-packages/pandas/_libs/parsers.pyx\u001b[0m in \u001b[0;36mpandas._libs.parsers.raise_parser_error\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;31mParserError\u001b[0m: Error tokenizing data. C error: Calling read(nbytes) on source failed. Try engine='python'."
     ]
    }
   ],
   "source": [
    "date_4 = pd.read_csv(\"data/Thuesday-20-02-2018_TrafficForML_CICFlowMeter.csv\", low_memory=False)\n",
    "date_4.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "systematic-buying",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Benign              1048009\n",
       "Brute Force -Web        362\n",
       "Brute Force -XSS        151\n",
       "SQL Injection            53\n",
       "Name: Label, dtype: int64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_4[\"Label\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "afraid-adrian",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign , Benign actual, Brute_Force_Web , Brute_Force_XSS and SQL_Injection Samples in Friday-23-02-2018 : 524, 1048009 , 362 , 151 and 53\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "color = [\"g\",\"r\",\"b\",\"y\"]\n",
    "\n",
    "Benign                   = int(date_4[\"Label\"].value_counts()[0]/2000)\n",
    "Benign_actual            = date_4[\"Label\"].value_counts()[0]\n",
    "Brute_Force_Web          = date_4[\"Label\"].value_counts()[1]\n",
    "Brute_Force_XSS          = date_4[\"Label\"].value_counts()[2]\n",
    "SQL_Injection            = date_4[\"Label\"].value_counts()[3]\n",
    "\n",
    "Attacks = [\"Benign\", \"Brute_Force_Web\", \"Brute_Force_XSS\", \"SQL_Injection\"]\n",
    "Nums = [Benign, Brute_Force_Web, Brute_Force_XSS, SQL_Injection]\n",
    "\n",
    "print(f\"Benign , Benign actual, Brute_Force_Web , Brute_Force_XSS and SQL_Injection Samples in Friday-23-02-2018 : {Benign}, {Benign_actual} , {Brute_Force_Web} , {Brute_Force_XSS} and {SQL_Injection}\")\n",
    "# date_3[\"Label\"].value_counts()\n",
    "\n",
    "fig = plt.figure(figsize = (10, 5))\n",
    " \n",
    "# creating the bar plot\n",
    "plt.bar(Attacks, Nums, color=color,\n",
    "        width = 0.4)\n",
    " \n",
    "plt.xlabel(\"Number of Samples\")\n",
    "plt.ylabel(\"Exploitations / Attacks\")\n",
    "plt.title('Total number of Benign and Malicious samples in the dataset')\n",
    "plt.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "certain-constant",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape of Friday-23-02-2018 data : (1048575, 80)\n"
     ]
    }
   ],
   "source": [
    "print(f\"Shape of Friday-23-02-2018 data : {date_4.shape}\")\n",
    "total_date_3 =  date_4.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "precise-packing",
   "metadata": {},
   "outputs": [],
   "source": [
    "del date_4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "subject-doubt",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Dst Port</th>\n",
       "      <th>Protocol</th>\n",
       "      <th>Timestamp</th>\n",
       "      <th>Flow Duration</th>\n",
       "      <th>Tot Fwd Pkts</th>\n",
       "      <th>Tot Bwd Pkts</th>\n",
       "      <th>TotLen Fwd Pkts</th>\n",
       "      <th>TotLen Bwd Pkts</th>\n",
       "      <th>Fwd Pkt Len Max</th>\n",
       "      <th>Fwd Pkt Len Min</th>\n",
       "      <th>...</th>\n",
       "      <th>Fwd Seg Size Min</th>\n",
       "      <th>Active Mean</th>\n",
       "      <th>Active Std</th>\n",
       "      <th>Active Max</th>\n",
       "      <th>Active Min</th>\n",
       "      <th>Idle Mean</th>\n",
       "      <th>Idle Std</th>\n",
       "      <th>Idle Max</th>\n",
       "      <th>Idle Min</th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>01/03/2018 08:17:11</td>\n",
       "      <td>115307855</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1812348</td>\n",
       "      <td>0</td>\n",
       "      <td>1812348</td>\n",
       "      <td>1812348</td>\n",
       "      <td>56700000</td>\n",
       "      <td>6010057.622</td>\n",
       "      <td>61000000</td>\n",
       "      <td>52500000</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>01/03/2018 08:20:07</td>\n",
       "      <td>60997457</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>61000000</td>\n",
       "      <td>0</td>\n",
       "      <td>61000000</td>\n",
       "      <td>61000000</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>67</td>\n",
       "      <td>17</td>\n",
       "      <td>01/03/2018 08:17:18</td>\n",
       "      <td>61149019</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1500</td>\n",
       "      <td>0</td>\n",
       "      <td>300</td>\n",
       "      <td>300</td>\n",
       "      <td>...</td>\n",
       "      <td>8</td>\n",
       "      <td>3530939</td>\n",
       "      <td>0</td>\n",
       "      <td>3530939</td>\n",
       "      <td>3530939</td>\n",
       "      <td>19200000</td>\n",
       "      <td>12500000</td>\n",
       "      <td>32600000</td>\n",
       "      <td>7999725</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>01/03/2018 08:22:09</td>\n",
       "      <td>60997555</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>61000000</td>\n",
       "      <td>0</td>\n",
       "      <td>61000000</td>\n",
       "      <td>61000000</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>01/03/2018 08:24:11</td>\n",
       "      <td>61997503</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>999909</td>\n",
       "      <td>0</td>\n",
       "      <td>999909</td>\n",
       "      <td>999909</td>\n",
       "      <td>61000000</td>\n",
       "      <td>0</td>\n",
       "      <td>61000000</td>\n",
       "      <td>61000000</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 80 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "  Dst Port Protocol            Timestamp Flow Duration Tot Fwd Pkts  \\\n",
       "0        0        0  01/03/2018 08:17:11     115307855            5   \n",
       "1        0        0  01/03/2018 08:20:07      60997457            2   \n",
       "2       67       17  01/03/2018 08:17:18      61149019            5   \n",
       "3        0        0  01/03/2018 08:22:09      60997555            2   \n",
       "4        0        0  01/03/2018 08:24:11      61997503            3   \n",
       "\n",
       "  Tot Bwd Pkts TotLen Fwd Pkts TotLen Bwd Pkts Fwd Pkt Len Max  \\\n",
       "0            0               0               0               0   \n",
       "1            0               0               0               0   \n",
       "2            0            1500               0             300   \n",
       "3            0               0               0               0   \n",
       "4            0               0               0               0   \n",
       "\n",
       "  Fwd Pkt Len Min  ... Fwd Seg Size Min Active Mean Active Std Active Max  \\\n",
       "0               0  ...                0     1812348          0    1812348   \n",
       "1               0  ...                0           0          0          0   \n",
       "2             300  ...                8     3530939          0    3530939   \n",
       "3               0  ...                0           0          0          0   \n",
       "4               0  ...                0      999909          0     999909   \n",
       "\n",
       "  Active Min Idle Mean     Idle Std  Idle Max  Idle Min   Label  \n",
       "0    1812348  56700000  6010057.622  61000000  52500000  Benign  \n",
       "1          0  61000000            0  61000000  61000000  Benign  \n",
       "2    3530939  19200000     12500000  32600000   7999725  Benign  \n",
       "3          0  61000000            0  61000000  61000000  Benign  \n",
       "4     999909  61000000            0  61000000  61000000  Benign  \n",
       "\n",
       "[5 rows x 80 columns]"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_5 = pd.read_csv(\"data/Thursday-01-03-2018_TrafficForML_CICFlowMeter.csv\", low_memory=False)\n",
    "date_5.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "celtic-winter",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Benign           238037\n",
       "Infilteration     93063\n",
       "Label                25\n",
       "Name: Label, dtype: int64"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_5[\"Label\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "boring-spyware",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Benign           238037\n",
       "Infilteration     93063\n",
       "Name: Label, dtype: int64"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "indices = date_5.loc[date_5.Timestamp == \"Timestamp\"].index\n",
    "date_5_cp = date_5.copy()\n",
    "date_5_cp = date_5_cp.drop(date_5_cp.index[indices])\n",
    "date_5_cp[\"Label\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "unsigned-springer",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign and Infilteration Samples in Friday-23-02-2018 : 238037 and 93063\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "color = [\"g\",\"r\",\"b\",\"y\"]\n",
    "\n",
    "Benign                   = date_5_cp[\"Label\"].value_counts()[0]\n",
    "Infilteration            = date_5_cp[\"Label\"].value_counts()[1]\n",
    "\n",
    "Attacks = [\"Benign\", \"Infilteration\"]\n",
    "Nums = [Benign, Infilteration]\n",
    "\n",
    "print(f\"Benign and Infilteration Samples in Friday-23-02-2018 : {Benign} and {Infilteration}\")\n",
    "# date_3[\"Label\"].value_counts()\n",
    "\n",
    "fig = plt.figure(figsize = (10, 5))\n",
    " \n",
    "# creating the bar plot\n",
    "plt.bar(Attacks, Nums, color=color,\n",
    "        width = 0.4)\n",
    " \n",
    "plt.xlabel(\"Number of Samples\")\n",
    "plt.ylabel(\"Exploitations / Attacks\")\n",
    "plt.title('Total number of Benign and Malicious samples in the dataset')\n",
    "plt.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "intended-focus",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape of Friday-23-02-2018 data : (331100, 80)\n"
     ]
    }
   ],
   "source": [
    "print(f\"Shape of Friday-23-02-2018 data : {date_5_cp.shape}\")\n",
    "total_date_5 =  date_5_cp.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "amateur-brother",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "16556"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "del date_5, date_5_cp\n",
    "gc.collect()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "sunrise-drain",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Dst Port</th>\n",
       "      <th>Protocol</th>\n",
       "      <th>Timestamp</th>\n",
       "      <th>Flow Duration</th>\n",
       "      <th>Tot Fwd Pkts</th>\n",
       "      <th>Tot Bwd Pkts</th>\n",
       "      <th>TotLen Fwd Pkts</th>\n",
       "      <th>TotLen Bwd Pkts</th>\n",
       "      <th>Fwd Pkt Len Max</th>\n",
       "      <th>Fwd Pkt Len Min</th>\n",
       "      <th>...</th>\n",
       "      <th>Fwd Seg Size Min</th>\n",
       "      <th>Active Mean</th>\n",
       "      <th>Active Std</th>\n",
       "      <th>Active Max</th>\n",
       "      <th>Active Min</th>\n",
       "      <th>Idle Mean</th>\n",
       "      <th>Idle Std</th>\n",
       "      <th>Idle Max</th>\n",
       "      <th>Idle Min</th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>15/02/2018 08:25:18</td>\n",
       "      <td>112641158</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>56320579.0</td>\n",
       "      <td>7.042784e+02</td>\n",
       "      <td>56321077</td>\n",
       "      <td>56320081</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>22</td>\n",
       "      <td>6</td>\n",
       "      <td>15/02/2018 08:29:05</td>\n",
       "      <td>37366762</td>\n",
       "      <td>14</td>\n",
       "      <td>12</td>\n",
       "      <td>2168</td>\n",
       "      <td>2993</td>\n",
       "      <td>712</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>32</td>\n",
       "      <td>1024353.0</td>\n",
       "      <td>649038.754495</td>\n",
       "      <td>1601183</td>\n",
       "      <td>321569</td>\n",
       "      <td>11431221.0</td>\n",
       "      <td>3.644991e+06</td>\n",
       "      <td>15617415</td>\n",
       "      <td>8960247</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>47514</td>\n",
       "      <td>6</td>\n",
       "      <td>15/02/2018 08:29:42</td>\n",
       "      <td>543</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>32</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>15/02/2018 08:28:07</td>\n",
       "      <td>112640703</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>56320351.5</td>\n",
       "      <td>3.669884e+02</td>\n",
       "      <td>56320611</td>\n",
       "      <td>56320092</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>15/02/2018 08:30:56</td>\n",
       "      <td>112640874</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>56320437.0</td>\n",
       "      <td>7.198347e+02</td>\n",
       "      <td>56320946</td>\n",
       "      <td>56319928</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 80 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Dst Port  Protocol            Timestamp  Flow Duration  Tot Fwd Pkts  \\\n",
       "0         0         0  15/02/2018 08:25:18      112641158             3   \n",
       "1        22         6  15/02/2018 08:29:05       37366762            14   \n",
       "2     47514         6  15/02/2018 08:29:42            543             2   \n",
       "3         0         0  15/02/2018 08:28:07      112640703             3   \n",
       "4         0         0  15/02/2018 08:30:56      112640874             3   \n",
       "\n",
       "   Tot Bwd Pkts  TotLen Fwd Pkts  TotLen Bwd Pkts  Fwd Pkt Len Max  \\\n",
       "0             0                0                0                0   \n",
       "1            12             2168             2993              712   \n",
       "2             0               64                0               64   \n",
       "3             0                0                0                0   \n",
       "4             0                0                0                0   \n",
       "\n",
       "   Fwd Pkt Len Min  ...  Fwd Seg Size Min  Active Mean     Active Std  \\\n",
       "0                0  ...                 0          0.0       0.000000   \n",
       "1                0  ...                32    1024353.0  649038.754495   \n",
       "2                0  ...                32          0.0       0.000000   \n",
       "3                0  ...                 0          0.0       0.000000   \n",
       "4                0  ...                 0          0.0       0.000000   \n",
       "\n",
       "   Active Max  Active Min   Idle Mean      Idle Std  Idle Max  Idle Min  \\\n",
       "0           0           0  56320579.0  7.042784e+02  56321077  56320081   \n",
       "1     1601183      321569  11431221.0  3.644991e+06  15617415   8960247   \n",
       "2           0           0         0.0  0.000000e+00         0         0   \n",
       "3           0           0  56320351.5  3.669884e+02  56320611  56320092   \n",
       "4           0           0  56320437.0  7.198347e+02  56320946  56319928   \n",
       "\n",
       "    Label  \n",
       "0  Benign  \n",
       "1  Benign  \n",
       "2  Benign  \n",
       "3  Benign  \n",
       "4  Benign  \n",
       "\n",
       "[5 rows x 80 columns]"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_6 = pd.read_csv(\"data/Thursday-15-02-2018_TrafficForML_CICFlowMeter.csv\", low_memory=False)\n",
    "date_6.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "norwegian-rough",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Benign                   996077\n",
       "DoS attacks-GoldenEye     41508\n",
       "DoS attacks-Slowloris     10990\n",
       "Name: Label, dtype: int64"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_6[\"Label\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "velvet-attachment",
   "metadata": {},
   "outputs": [],
   "source": [
    "# indices = date_5.loc[date_5.Timestamp == \"Timestamp\"].index\n",
    "# date_5_cp = date_5.copy()\n",
    "# date_5_cp = date_5_cp.drop(date_5_cp.index[indices])\n",
    "# date_5_cp[\"Label\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "compatible-latin",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Benign', 'DoS attacks-GoldenEye', 'DoS attacks-Slowloris'] Samples in Thursday-15-02-2018 : [996077  41508  10990]\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAFNCAYAAABIc7ibAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAs6UlEQVR4nO3dd7wkVZ3//9ebIamACIyuJFFEEBMqIq66ZsXIrihBUXERDIvirriru65iWOPPXfUrBlRMqJh1VBRcFzAiDBIEFEUEScoIDEEBCZ/fH3Wu9DQ39J2Znrpz5/V8PPpxu9KpT1VX9f3UOaerUlVIkiRp1Vqr7wAkSZLWRCZhkiRJPTAJkyRJ6oFJmCRJUg9MwiRJknpgEiZJktQDkzDNOUkqyT3nQBzHJ3lRT+u+XZJvJLkqyRdX8bofmeScVbnO5ZFkvyQ/XJXrSHJtknvMsMzWbb4F44xtrhnH55HkuUmOXYnlje2cTvKJJG8ZR9mav0zCNLL2j2XidUuS6waGnzvFMo9OctGqjnUeeBZwF2DTqnr28MQkhya5cWD//yLJHitjxVX1g6rafmWU1Zck27Rk/tSh8Zsl+UuS85en3KraoKrOm2Ge37X5bl6edehWVfWZqnri8izbzpEjV3ZMK8OqusDr80JSozEJ08jaP5YNqmoD4HfA0wfGfabv+OaqdGZ7rt0N+FVV3TTNPJ8f+DxeCRyZ5C7LG+c8dfsk9x0Yfg7w276CkaRBJmFaYUnWS/KeJJe013vauDsA3wY2H6ix2TzJLkl+kmRpkkuTvD/JuiOu6/gkb07yoyTXJDk2yWZt2m1q3ZKcn+Tx7f2hSb6Y5Mi27M+T3CvJa5NcluTCJMNX3dsmOSnJ1Um+nmSTgbJ3TfLjth2nJ3n0UJz/leRHwJ+B2zRhJbl3m29pkrOSPKONfyPwemCvts/2n2m/VNUxwDXAtgPlPy3Jaa38Hye5/9B+OSTJGa3J8/NJ1p9sPyZ5UJJT2z77Ypv3LYPzJnlV24eXJnnhVHEmeWGrtbsmyXlJXjwwbdqykmyaZFH7LE4a3NZpfBp4wcDw84FPDcX0miS/aTGdneQfpon/r03l6ZqM353kgrYPf9jGTdTCrd3m27zFfUWSc5McMFDeMk1Yk+z7f0tycYvtnCSPmyKup7TYr2nzH9LG3ynJN5MsSXJle7/lwHLHJ3lLOz6uTdcEvmmSz7T9fHKSbYa2/xXts/tjkndliguMJDsk+W7b7nOS7DlTvJOUMdwcXElekuTX7bg+LEkmWW434N+59Rw6fWDy3TLJ90dbbspzepJ1PDDJz1o5nwfWH5g25X5P8l/AI4H3t9je38a/N9130NVJTknyyIHydkmyuE37Q5L/ninmqdajOaaqfPma9Qs4H3h8e/8m4ETgzsBC4MfAm9u0RwMXDS37YGBXYG1gG+AXwCsHphdwzynWezzwG+BewO3a8NunWddgnIcC1wNPauv+FF2tyH8A6wAHAL8dWtfFwH2BOwBfBo5s07YALgeeQncx84Q2vHBg2d8B92nrWmcornWAc+n+UawLPJYuidp+INYjp9n/hw7EEuCpwFJg4zbugcBlwEOBBXSJyPnAegP75SRgc2CT9hm8ZHg/ttguAA5uMT8T+AvwloF5b2rHwDptf/wZuNMUcT+VLnkK8Kg274NGKQs4CvhC+yzu2z6bH06xnm3ojqNtgAvbPtgR+CXweOD8gXmf3fbDWsBewJ+Au7Zp+w2ug4FjEzisfc5btPL/FlhvYN1rt/m+D3yA7p/0TsAS4LFt2icm9uUk+377FvvmA9u07RTbeynwyPb+TgP7dFNgD+D2wIbAF4GvDR3j57bP5I7A2cCv2j6aOEc+PrT9x9EdM1u3eV80vK/aZ3Qh8MJWzgOBPwI7ThfvJNs12f7/JrBxW/8SYLeZzpERvz+mPaeHypk4L/6Z7lh9FnAjt54Xo+z3Fw2VuW9bbm3gVcDvgfXbtJ8Az2vvNwB2ncX30Ism2z++5sZrtawJS3JEuivlM0ecf8921XVWks+OO7410HOBN1XVZVW1BHgj8LypZq6qU6rqxKq6qarOBz5M9w95VB+vql9V1XV0/5R3msWyP6iqY6pr5vsiXdL49qq6ke6f/DZJNh6Y/9NVdWZV/Qn4T2DPdB2u9wWOrqqjq+qWqvousJjuy3DCJ6rqrLadNw7FsSvdl+nbq+ovVfV/dP9c9pnFtuyZZClwLbAIeGtVLW3TDgQ+XFU/raqbq+qTwA1tvRPeV1WXVNUVwDeYfD9OJMvvq6obq+ordMnboBvpPv8bq+roFs+kfcqq6ltV9ZvqnAAcS3e1Pm1ZbZ/vAby+qv5UVWcCn5x5F3ERcA5dUvF8upqx4Zi+2PbDLVX1eeDXwC7TFdpqf/4ROLiqLm77+MdVdcPQfFsBDwf+raqur6rTgI+2WGZyM11St2OSdarq/Kr6zRTz3tjm26iqrqyqn7Vtu7yqvlxVf66qa4D/4rbn2sfbZ3IVXc31b6rqfwfOkQcOzf+Oqrqiqn4HvIfJj9mn0SW6H2/H/6l0FzET/RsnjXdEb6+qpW39xzG78x+m/v4Y5ZyesCtd8vWedqx+CTh5YuKI+30ZVXVkW+6mqno33Wc/cR7dCNwzyWZVdW1VnbgcMWsOWi2TMLqrx91GmTHJdsBrgYdX1X3o+s5o5dqc7qpwwgVt3KTSNQF+M8nvk1wNvBXYbKr5J/H7gfd/pktmRvWHgffXAX+sWztQX9f+DpZ34cD7C+i+eDej67P17NYEsLQlQ48A7jrFssM2By6sqluGyt9i1A0BvlBVG1fVHehqMp6fW5v37ga8aii+rVj2cxllP24OXFzVXVY3w9t1eS3bd23KzyTJk5Oc2JqoltL9sxj87KcqayFdMjj8eYziU3Q1KvswSRKW5Pm5tdl2KV0t20zH42Z0NVtTJUUTNgeuaP+IB+Oe8XOuqnPpvq8OBS5LclSSqc6rPej25QVJTkjyMIAkt0/y4XRNplfT1cptnGV/uTl8TgwPD3+Ww5/BZDHdDXjo0PH3XOBvpot3RCty/k+3/Cjn9ITJzou/Ho8j7vdlpOse8It0TdtL6WomJ47D/elq736Zron4acsRs+ag1TIJq6rvA1cMjkuybZLvtLb0HyTZoU06ADisqq5sy162isNdE1xC92UwYes2Drrmg2EfpGsW2q6qNqJrkrtNv47l8Ce66n8A2hfewhUsc6uB91vTXZH+ke4f0adbEjTxukNVvX1g/sm2fcIlwFZZtj/N1nRNbLPWahS/DTy9jboQ+K+h+G5fVZ+bZdGXAlsky/S72WqqmaeTZD262pD/D7hLVW0MHM1on/0SuqbK4c9jFF+mawY9r9WeDMZ0N+AjwEF0v0TdGDhzhJj+SNe0PVO/tEuATZJsOBT3xOe8zDHLrUkKAFX12ap6BN35VcA7JltJVZ1cVbvTdQn4Gl0ND3TNWtsDD23n2t+18Styvg1/BpdMMs+FwAlDx98GVfXSGeJdmaY7/yYzyjk9YbLzYvB4nGm/LxNb6//1r8CedM3vGwNXTcxfVb+uqn3o9tc7gC+l63M7U8yz3QdaxVbLJGwKhwMvr6oHA4fQ9cGA7urhXuk6Yp6YrsOmVq7PAa9LsjBdJ9fXAxM/Df8DsGmSOw7MvyFwNXBtS5ZfupLi+BWwfpKnJlkHeB1dlf6K2DfJjkluT9dX6Uut5uxI4OlJnpRkQZL103Wq3nL64v7qp3RX4f+aZJ3WmfbpdE2is9bWuxtwVhv1EeAlSR6azh3aftlw6lIm9RO6ZrGDkqydZHdmaKqbxrp0n8cS4KYkTwZGuv1A2+dfAQ5ttQw7smyH++mW/RNdn7vJfqp/B7p/VEug++EAXU3YTGXeAhwB/He6jvcLkjysJZqD811I10fybe0YuT9drcbE+XEa8JQkmyT5GwZq6pNsn+Sxrczr6WqlBmtOJ+ZbN939tO5YXbP31QPzbdiWW5ruRyVvmGnbRvDqdB3Pt6LrK/j5Seb5Jt337vPa8b1Okoek+zHKdPGuTH+g614w6v+52ZzTP6G7KHhF27Znsux5MdN+/wPL/lhnw1beEmDtJK8HNpqYmGTfJAvbcbe0jb5lhJiH16M5Zl4kYUk2oOsU+8Ukp9H1MZqojl0b2I6uw+s+wEeybJ8frbi30PVDOAP4OfCzNo6q+iVdknZeqy7fnC5Jfg5dR/SPMPmX+Ky1Pi0vo+tzczFdLcOK3qPs03TN37+na356RVvXhcDudLV4S+iuSF/NiOdUVf2FLul6Ml2tygeA57f9NaqJX35dS9cf5Ud0/fGoqsV0tcDvB66k63y93yzKHozzmXSJw1K6PijfpOtfNtuyrqHbf19oMT2Hri/bqA6iazr6Pd1n8vFZrHvxZP2pqups4N10/1T/ANyPbj+O4hC64/1kupr5dzD5578PXaf6S4CvAm+oqv9t0z4NnE73Q4ljWfZcWA94O93x8Xu6WpDXThHL84DzW9PXS+ia/qDrs3W7VsaJwHdG3LbpfB04hS6B/BbwseEZ2mf9RGBvuu3+Pd3+mUhSp4p3ZZq4yfHlSWbsczabc3rgvNiP7rPfi+4iYcJ7mH6/vxd4VrpfTr4POKbN8yu6Zs3rWbbZdzfgrHauvxfYu6quGyHm4fVojsmyTdqrj3Q/m/5mVd03yUbAOVV1m3bwJB8CflpVH2/D3wNeU1UnD88raWZJfgp8aOKc0pojSdF1Izi371ik+WBe1IRV1dXAb5M8G/56c8wHtMlfo6sFozWV3QuY9o7Xkm6V5FFJ/qY1R74AuD8rp0ZFktZoq2USluRzdM0H26e7ueP+dNXZ+6e7Kd9ZdFW00FXzXp7kbLqfM7+6qi7vI25pNbU9XZPZUroOx8+qqkt7jUiS5oHVtjlSkiRpdbZa1oRJkiSt7kzCJEmSerB23wHM1mabbVbbbLNN32FIkiTN6JRTTvljVU164/DVLgnbZpttWLx4cd9hSJIkzSjJlI9YszlSkiSpByZhkiRJPTAJkyRJ6oFJmCRJUg9MwiRJknpgEiZJktSDsSVhSY5IclmSM6eYniTvS3JukjOSPGhcsUiSJM0146wJ+wSw2zTTnwxs114HAh8cYyySJElzytiSsKr6PnDFNLPsDnyqOicCGye567jikSRJmkv67BO2BXDhwPBFbZwkSdK8t1p0zE9yYJLFSRYvWbKk73AkSZJWWJ/PjrwY2GpgeMs27jaq6nDgcICdd965xh1Y3phxr2KNU28Y+8cmSdJqpc+asEXA89uvJHcFrqqqS3uMR5IkaZUZW01Yks8BjwY2S3IR8AZgHYCq+hBwNPAU4Fzgz8ALxxWLJEnSXDO2JKyq9plhegH/NK71S5IkzWWrRcd8SZKk+cYkTJIkqQcmYZIkST0wCZMkSeqBSZgkSVIPTMIkSZJ6YBImSZLUA5MwSZKkHpiESZIk9cAkTJIkqQcmYZIkST0wCZMkSeqBSZgkSVIPTMIkSZJ6YBImSZLUA5MwSZKkHpiESZIk9cAkTJIkqQcmYZIkST0wCZMkSeqBSZgkSVIPTMIkSZJ6YBImSZLUA5MwSZKkHpiESZIk9cAkTJIkqQcmYZIkST0wCZMkSeqBSZgkSVIPTMIkSZJ6YBImSZLUA5MwSZKkHpiESZIk9cAkTJIkqQcmYZIkST0wCZMkSeqBSZgkSVIPTMIkSZJ6YBImSZLUA5MwSZKkHpiESZIk9cAkTJIkqQcmYZIkST0YaxKWZLck5yQ5N8lrJpm+dZLjkpya5IwkTxlnPJIkSXPF2JKwJAuAw4AnAzsC+yTZcWi21wFfqKoHAnsDHxhXPJIkSXPJOGvCdgHOrarzquovwFHA7kPzFLBRe39H4JIxxiNJkjRnrD3GsrcALhwYvgh46NA8hwLHJnk5cAfg8WOMR5Ikac7ou2P+PsAnqmpL4CnAp5PcJqYkByZZnGTxkiVLVnmQkiRJK9s4k7CLga0Ghrds4wbtD3wBoKp+AqwPbDZcUFUdXlU7V9XOCxcuHFO4kiRJq844k7CTge2S3D3JunQd7xcNzfM74HEASe5Nl4RZ1SVJkua9sSVhVXUTcBBwDPALul9BnpXkTUme0WZ7FXBAktOBzwH7VVWNKyZJkqS5Ypwd86mqo4Gjh8a9fuD92cDDxxmDJEnSXNR3x3xJkqQ1kkmYJElSD0zCJEmSemASJkmS1AOTMEmSpB6YhEmSJPXAJEySJKkHJmGSJEk9MAmTJEnqgUmYJElSD0zCJEmSemASJkmS1AOTMEmSpB7MmIQleXaSDdv71yX5SpIHjT80SZKk+WuUmrD/rKprkjwCeDzwMeCD4w1LkiRpfhslCbu5/X0qcHhVfQtYd3whSZIkzX+jJGEXJ/kwsBdwdJL1RlxOkiRJUxglmdoTOAZ4UlUtBTYBXj3OoCRJkua7UZKwfarqK1X1a4CquhR47HjDkiRJmt/WHmGePZJcX1WfAUhyGLD+eMOSJEma30ZKwoBFSW4BdgOWVtX+4w1LkiRpfpsyCUuyycDgi4CvAT8C3phkk6q6YsyxSZIkzVvT1YSdAhSQgb9Pba8C7jH26CRJkuapKZOwqrr7qgxEkiRpTTLKY4v+KcnGA8N3SvKysUYlSZI0z41yi4oD2v3BAKiqK4EDxhaRJEnSGmCUJGxBkkwMJFmAjy2SJElaIaPcouI7wOfbo4sAXtzGSZIkaTmNkoT9G13i9dI2/F3go2OLSJIkaQ0wYxJWVbcAH2wvSZIkrQQzJmFJtgPeBuzIwOOKqsr7hEmSJC2nUTrmf5yuFuwm4DHAp4AjxxmUJEnSfDdKEna7qvoekKq6oKoOpbtrviRJkpbTKB3zb0iyFvDrJAcBFwMbjDcsSZKk+W2UmrCDgdsDrwAeDOwLPH+cQUmSJM13oyRh21TVtVV1UVW9sKr2ALYed2CSJEnz2ShJ2GtHHCdJkqQRTdknLMmTgacAWyR538Ckjeh+KSlJkqTlNF3H/EuAxcAzgFMGxl8D/PM4g5IkSZrvpkzCqup04PQkd6mqTw5OS3Iw8N5xBydJkjRfjdInbO9Jxu23kuOQJElao0zXJ2wf4DnA3ZMsGpi0EXDFuAOTJEmaz6brE/Zj4FJgM+DdA+OvAU4fZ1CSJEnz3ZTNke0RRcdX1cOq6oSqOoGuo/59gEVTLTcoyW5JzklybpLXTDHPnknOTnJWks8u11ZIkiStZmZ8bFGSdemeFfkc4EnAl4EPjbDcAuAw4AnARcDJSRZV1dkD82xHd8+xh1fVlUnuvFxbIUmStJqZrk/YE4F9gCcCxwGfAh5SVS8csexdgHOr6rxW3lHA7sDZA/McABxWVVcCVNVls94CSZKk1dB0v478DnAP4BFVtW9VfQO4ZRZlbwFcODB8URs36F7AvZL8KMmJSXabRfmSJEmrremaIx9Ed3uK/01yHnAUsGAM698OeDSwJfD9JPerqqWDMyU5EDgQYOutfWylJEla/U3XMf+0qnpNVW0LvAHYCVgnybdbUjSTi4GtBoa3bOMGXQQsqqobq+q3wK/okrLhWA6vqp2raueFCxeOsGpJkqS5bZSbtVJVP66ql9MlUv8D7DrCYicD2yW5e+vcvze3/VXl1+hqwUiyGV3z5HkjRS5JkrQam/HXkYOq6hbg2Paaad6bkhwEHEPXjHlEVZ2V5E3A4qpa1KY9McnZwM3Aq6vq8tluhCRJ0upmVknYbFXV0cDRQ+NeP/C+gH9pL0mSpDXGSM2RkiRJWrmmTMKSnJLkve2u9+uvyqAkSZLmu+lqwh4KfJWu4/wJSY5OcnCSe62SyCRJkuaxKfuEVdVNwPHtRZLNgd2AtyTZFvhpVb1sFcQoSZI074zcMb+qLgGOAI5IshbwsLFFJUmSNM8t168j260qfrSSY5EkSVpj+OtISZKkHpiESZIk9WDGJCzJO5NslGSdJN9LsiTJvqsiOEmSpPlqlJqwJ1bV1cDTgPOBewKvHmdQkiRJ890oSdhE5/2nAl+sqqvGGI8kSdIaYZRfR34zyS+B64CXJlkIXD/esCRJkua3GWvCquo1wN8CO1fVjcCfgN3HHZgkSdJ8Nup9wnYAtkkyOP+nxhCPJEnSGmHGJCzJp4FtgdOAm9vowiRMkiRpuY1SE7YzsGNV1biDkSRJWlOM8uvIM4G/GXcgkiRJa5JRasI2A85OchJww8TIqnrG2KKSJEma50ZJwg4ddxCSJElrmhmTsKo6IcldgIe0USdV1WXjDUuSJGl+G+XZkXsCJwHPBvYEfprkWeMOTJIkaT4bpTnyP4CHTNR+tTvm/y/wpXEGJkmSNJ+N8uvItYaaHy8fcTlJkiRNYZSasO8kOQb4XBveCzh6fCFJkiTNf6N0zH91kj2Ah7dRh1fVV8cbliRJ0vw20rMjq+rLwJfHHIskSdIaY8okLMkPq+oRSa6he1bkXycBVVUbjT06SZKkeWrKJKyqHtH+brjqwpEkSVozjHKfsE+PMk6SJEmjG+VWE/cZHEiyNvDg8YQjSZK0ZpgyCUvy2tYf7P5Jrm6va4A/AF9fZRFKkiTNQ1MmYVX1ttYf7F1VtVF7bVhVm1bVa1dhjJIkSfPOKPcJe22SOwHbAesPjP/+OAOTJEmaz2ZMwpK8CDgY2BI4DdgV+Anw2LFGJkmSNI+N0jH/YOAhwAVV9RjggcDScQYlSZI0342ShF1fVdcDJFmvqn4JbD/esCRJkua3UR5bdFGSjYGvAd9NciVwwTiDkiRJmu9G6Zj/D+3toUmOA+4IfHusUUmSJM1zs7pjflWdUFWLgCPGGpUkSdI8tzx3zF+Ad8yXJElaIctzx/zL8I75kiRJK8Q75kuSJPVgyo75SXZot6P4YpIHDU+vqp+NNTJJkqR5bLpfR/4LcCDw7kmmFSPcMT/JbsB7gQXAR6vq7VPMtwfwJeAhVbV4pnIlSZJWd1MmYVV1YPv7mOUpuHXgPwx4AnARcHKSRVV19tB8G9Ldlf+ny7MeSZKk1dEot6hYJ8krknypvQ5Kss4IZe8CnFtV51XVX4CjgN0nme/NwDuA62cVuSRJ0mpslFtUfJDulhQfaK8Ht3Ez2QK4cGD4ojbur1pfs62q6lsjRStJkjRPjPLYoodU1QMGhv8vyekruuIkawH/Dew3wrwH0vVPY+utt17RVUuSJPVulJqwm5NsOzGQ5B7AzSMsdzGw1cDwlm3chA2B+wLHJzkf2BVYlGTn4YKq6vCq2rmqdl64cOEIq5YkSZrbRqkJezVwXJLzgAB3A144wnInA9sluTtd8rU38JyJiVV1FbDZxHCS44FD/HWkJElaE4zyAO/vJdkO2L6NOqeqbhhhuZuSHAQcQ3eLiiOq6qwkbwIWt2dQSpIkrZGmu1nrM6eYdM8kVNVXZiq8qo4Gjh4a9/op5n30TOVJkiTNF9PVhD19mmkFzJiESZIkaXLT3ax1lH5fkiRJWg6j3Kx10yTvS/KzJKckeW+STVdFcJIkSfPVKLeoOApYAuwBPKu9//w4g5IkSZrvRrlFxV2r6s0Dw29Jste4ApIkSVoTjFITdmySvZOs1V570t12QpIkSctplCTsAOCzwA3tdRTw4iTXJLl6nMFJkiTNV6PcrHXDVRGIJEnSmmSUX0fuPzS8IMkbxheSJEnS/DdKc+Tjkhyd5K5J7gucSPfwbUmSJC2nUZojn9N+Dflz4E/Ac6rqR2OPTJIkaR4bpTlyO+Bg4MvABcDzktx+3IFJkiTNZ6M0R34D+M+qejHwKODXwMljjUqSJGmeG+VmrbtU1dUAVVXAu5N8Y7xhSZIkzW9T1oQl+VeAqro6ybOHJu83zqAkSZLmu+maI/ceeP/aoWm7jSEWSZKkNcZ0SVimeD/ZsCRJkmZhuiSspng/2bAkSZJmYbqO+Q9oz4YMcLuB50QGWH/skUmSJM1jUyZhVbVgVQYiSZK0JhnlPmGSJElayUzCJEmSemASJkmS1AOTMEmSpB6YhEmSJPXAJEySJKkHJmGSJEk9MAmTJEnqgUmYJElSD0zCJEmSemASJkmS1AOTMEmSpB6YhEmSJPXAJEySJKkHJmGSJEk9MAmTJEnqgUmYJElSD0zCJEmSemASJkmS1AOTMEmSpB6YhEmSJPXAJEySJKkHJmGSJEk9GGsSlmS3JOckOTfJayaZ/i9Jzk5yRpLvJbnbOOORJEmaK8aWhCVZABwGPBnYEdgnyY5Ds50K7FxV9we+BLxzXPFIkiTNJeOsCdsFOLeqzquqvwBHAbsPzlBVx1XVn9vgicCWY4xHkiRpzhhnErYFcOHA8EVt3FT2B749xngkSZLmjLX7DgAgyb7AzsCjpph+IHAgwNZbb70KI5MkSRqPcdaEXQxsNTC8ZRu3jCSPB/4DeEZV3TBZQVV1eFXtXFU7L1y4cCzBSpIkrUrjTMJOBrZLcvck6wJ7A4sGZ0jyQODDdAnYZWOMRZIkaU4ZWxJWVTcBBwHHAL8AvlBVZyV5U5JntNneBWwAfDHJaUkWTVGcJEnSvDLWPmFVdTRw9NC41w+8f/w41y9JkjRXecd8SZKkHpiESZIk9cAkTJIkqQcmYZIkST0wCZMkSeqBSZgkSVIPTMIkSZJ6YBImSZLUA5MwSZKkHpiESZIk9cAkTJIkqQcmYZIkST0wCZMkSeqBSZgkSVIPTMIkSZJ6YBImSZLUA5MwSZKkHpiESZIk9cAkTJIkqQcmYZIkST0wCZMkSeqBSZgkSVIPTMIkSZJ6YBImSZLUA5MwSZKkHpiESZIk9cAkTJIkqQcmYZIkST0wCZMkSeqBSZgkSVIPTMIkSZJ6YBImSZLUA5MwSZKkHpiESZIk9cAkTJIkqQcmYZIkST1Yu+8AJM1zSd8RzC9VfUcgaSWxJkySJKkHJmGSJEk9MAmTJEnqgUmYJElSD0zCJEmSemASJkmS1IOxJmFJdktyTpJzk7xmkunrJfl8m/7TJNuMMx5JkqS5Ymz3CUuyADgMeAJwEXBykkVVdfbAbPsDV1bVPZPsDbwD2GtcMUmStLrylnsrX9+33RtnTdguwLlVdV5V/QU4Cth9aJ7dgU+2918CHpd4mEmSpPlvnEnYFsCFA8MXtXGTzlNVNwFXAZuOMSZJkqQ5YbV4bFGSA4ED2+C1Sc7pM545ZjPgj30HMZMcagWn5rzV4lyyTUqrgdXjXGKVnU53m2rCOJOwi4GtBoa3bOMmm+eiJGsDdwQuHy6oqg4HDh9TnKu1JIuraue+45BWd55L0srhuTS6cTZHngxsl+TuSdYF9gYWDc2zCHhBe/8s4P+q+u4mJ0mSNH5jqwmrqpuSHAQcAywAjqiqs5K8CVhcVYuAjwGfTnIucAVdoiZJkjTvxYqn1VuSA1tzraQV4LkkrRyeS6MzCZMkSeqBjy2SJEnqgUlYj5LcnOS0JKcn+VmSv12Bst6U5PErMz4JljlOz2rH6quSTPvdkeT2ST6T5OdJzkzywyQbzGKdr0xy+4Hhf1+B+A9NcsgKLL9bkpOS/LLth88n2XqGZT6R5FmTjH90km+uQCznt316Wnu9b3nL0tyxJp9jSZ6W5NS23WcnefGKlrkicSV5SZLnr8h6Z2O1uE/YPHZdVe0EkORJwNuARy1PQVX1+pUYlzRo8Di9M/BZYCPgDdMsczDwh6q6X1tue+DGWazzlcCRwJ/b8L8Db51V1CtBkvsC/w94RlX9oo17BrAN8LtVHU/zmKpaLe7BpJGtkedYknXobj+1S1VdlGQ9unOrF0nWrqoPrcp1WhM2d2wEXDkxkOTVSU5OckaSN7Zx2yT5RZKPtCumY5Pcrk3765V3kqe0q/ZTkrxv4sq7XRUckeT4JOcleUUP26nVWFVdRnfj5IPSWT/Jx9vV+KlJHtNmvSsD9wWsqnOq6obh8pJ8MMnidjxPHOevADYHjktyXJK3A7drNQWfafN8rR3fZ6W7mfNEebu1WuXTk3xvkvUdkOTbSW6X5BXtyvuMJEdNscn/Brx1IgFr27Koqr7fytspyYmtjK8mudMk69ytnY8/A545MP4O7Xw8qe273dv4/ZJ8Jcl3kvw6yTuniG2inG1b2RPD200MJ3lwkhPavjomyV2nK0v9W8POsQ3pKoMub9twQ1Xd5mbsk51nSe6c5JQ2/QFJKq2GOslvMlDLN1UZbfzxSd6TZDFwcAZqz0b8jlgxVeWrpxdwM3Aa8Eu6RzY9uI1/It3VQegS5W8Cf0d3hXATsFOb7wvAvu39J+jutbY+3aOg7t7Gfw74Znt/KPBjYD26OxpfDqzT937wNbdfwLWTjFsK3AV4Fd3tZwB2oKsdWh/YCbgM+AnwFmC7KcrepP1dABwP3L8Nnw9sNlUMA8vdDjiT7nFnC4eO/Yl5DgUOAQ4Cvg6s18ZfMvB+4yni+xnwgGn2zRnAo9r7NwHvae+Hz8ft2vn8hYHz8a0D5+/GwK+AOwD7AefR3bx6feACYKuB/fJzuu+N04B/buOPG/heeCvwcmCddr4vbOP3mvisfM2t1xp+jn20bcfngOcCaw2W2d5PdZ6dRVeBcRDdvUmfS3d3+p/MoozjgQ8MxDO4zIzxr+jLmrB+XVdVO1XVDsBuwKeShC4JeyJwKt0/gR3ovsQBfltVp7X3p3DbqtsdgPOq6rdt+HND079V3dXGH+kO/LusxO3RmucRdE0aVNUv6RKGe7Vj9B7Au4BNgJOT3HuS5fdstTanAvcBdhxxva9IcjpwIt1TN7YDdgW+P3HsV9UVA/M/H3gy8Ky6tbbgDOAzSfalu7iZVpJNW03Br5IckuSOdF/MJ7RZPkl3sTRoB7pz9tfVfZMfOTDticBrkpxG949gfWCir9n3quqqqroeOJtlH3vymPa9sVNV/U8b91HghUkW0CVbnwW2B+4LfLet43V0Ty7R6mVen2NV9SLgccBJdIncEYPTZzjPfgw8vA2/tf19JPCDWZQB8Pkp9sGsviOWh0nYHFFVP6GrnVpId8X8toEv2ntW1cfarIPVzTcz+359K7q81nBJ7kF37Fw23XxVdW1VfaWqXkb3T+QpQ+Xcne5L93FVdX/gW3SJyEzrfzTweOBhVfUAun8uMy33c7oLlsEk5KnAYcCD6P6Brd2a7E5L8tE2z1ltOlV1eXX9dg4HRu4APd2mAHsMnOdb163NnrM9T79M9w/wacApVXV5K/+sgfLvV1VPXAlxa8zWsHOMqvp5u6B4ArDHTPEN+D5d0nU3uhq4B9AlrT+YbqFJ/GmK8beJf5blzsgkbI5IsgNddfHldE8Z+Me0X7ok2SJdZ81RnAPcI8k2bXivlR2r1lxJFgIfAt7fanZ+QNcEQJJ70dXknJPk4QN9Ltalu/q+YKi4jei+/K5Kche6JGLCNXT9RSbcmK4TL3TNdFdW1Z/bebNrG38i8HftHw9JNhlY/lTgxcCiJJun++XZVlV1HF2/rzsCG1TVk1rC8qK23DuB/xiqYbg9QFVdBVyZ5JFt/POAE1jWL4FtkmzbhvcZmHYM8PJW+02SB7KcWo3ZMcAHgY+30ecAC5M8rJW/TpL7LO86tGqsSedYkg1awjdhp+FtmOE8+wGwL/DrqrqF7sk7TwF+OIsyJjVV/NMtszysBenX7VozAXRXrS+oqpuBY9uX/k/a9/O1dAfazTMVWFXXJXkZ8J0kf6JrJ5dWxMRxug5dlfyngf9u0z4AfDDJz9u0/arqhpZ0fLAlGGvRXYF/ebDQqjo9yal0icqFwI8GJh9OdwxfUlWPacNntGaVfwRekuQXdInGia28Jek6EH+lfYFeRndlPbG+H7YOt9+iawo8sjVTBHhfVS0d3vCq+nmSg+m6CmwE/JGuT87Er9ZeAHyodQI+D3jh0PLXt5i+leTPdP80Jv7xvRl4T9uutYDf0tVkzeS4JBPfBWdU1cTP6T8D/ANwbFv3X9L9WOd9bTvXbus7a4R1aNVaU8+xAP+a5MPAdXQJ436T7J9Jz7OqOr9t//fbfD8EtqyqK0ctYxoLRoh/hXnH/HkoyQZVdW07OA+ju0r4n5mWk7T6av/87lhV/9l3LJJGY03Y/HRAkhcA69JVEX+453gkjVGSrwLbAo/tOxZJo7MmTJIkqQd2zJckSeqBSZgkSVIPTMIkSZJ6YBImaaVI9+y2dw8MH5Lk0JVU9l+fjTpOSZ6d7vmsxw2NXyvdc1jPTPcMv5Mn7pU0xljOT7LZONchqV8mYZJWlhuAZ861xGGWd7neHzig3Tdp0F50Dzy+f1Xdj+5+XEtXToSS1lQmYZJWlpvobvj4z8MThmuyklzb/j46yQlJvp7kvCRvT/LcJCe1GqdtB4p5fJLF6Z7d+LS2/IIk72o1U2ckefFAuT9Isoju2YvD8ezTyj8zyTvauNfTPfLkY0neNbTIXYFL2125qaqLJm4ImeSDLa6zkrxxYB3nJ3lbuke0LE7yoHSPbPlNkpcMxPn9JN9Kck6SD7WbYA7Hu2/bJ6cl+XDb7gVtv07Uzt1mv0ua27xPmKSV6TC6u26/cxbLPAC4N90jR84DPlpVu7Q71b8ceGWbbxtgF7r7YR2X5J50Dw2+qqoekmQ94EdJjm3zPwi478DD7AFIsjnwDuDBwJV0T6j4+6p6U5LHAodU1eKhGL8A/DDdY0++BxxZVae2af9RVVeke3j295Lcv6rOaNN+V1U7Jfkf4BN0DxteHziT7tE0tG2aeOTMd4BnAl8aiPfedDVxD6+qG5N8gO4xNmcBW1TVfdt8G8+4pyXNKdaESVppqupq4FPAK2ax2MlVdWlV3QD8hvbYHW59IPCEL1TVLVX1a7pkbQe6R6M8vz3y5afApsB2bf6ThhOw5iHA8VW1pKpuonvcz9/NsF0XAdsDrwVuoUu2Htcm79ke9XIqcB+6hGrCooFt+WlVXVNVS4AbBpKmk6rqvPbIss/R1cYNehxdwnhy287HAfdo++AeSf5fkt2Aq6fbBklzjzVhkla29wA/49YHSUPXVLkW/PXBuOsOTLth4P0tA8O3sOx31PCdpYvumW4vr6pjBiekeyjwn5Yn+Km0JPHbwLeT/AH4+yTnAYcAD6mqK5N8gq6ma8Lgtgxv58S2TbZdgwJ8sqpeOxxTkgcATwJeAuxJ98w/SasJa8IkrVRVdQVd893+A6PPp6vNAXgG3YOKZ+vZ7VeK29LVBJ0DHAO8NMk6AEnuleQOM5RzEvCoJJu1JsR9gBOmW6D159q8vV8LuD9d8+FGdMneVUnuAjx5ObZrlyR3b+XuRfcQ4kHfA56V5M5t/ZskuVv7AcRaVfVl4HV0za+SViPWhEkah3cDBw0MfwT4epLT6fo9LU8t1e/oEqiNgJdU1fVJPkrXZPmzJAGWAH8/XSFVdWmS1wDH0dUyfauqvj7Duu8MfKT1O6PF8f4Ww6nAL4ELgR8tx3adDLwfuGeL6atD8Z6d5HV0fdfWAm4E/gm4Dvj4QEf+29SUSZrbfHakJPWkNZseUlVP6zkUST2wOVKSJKkH1oRJkiT1wJowSZKkHpiESZIk9cAkTJIkqQcmYZIkST0wCZMkSeqBSZgkSVIP/n/EVwjvEjdIMQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "color = [\"g\",\"r\",\"b\",\"y\"]\n",
    "\n",
    "Attacks = date_6[\"Label\"].value_counts().index.to_list()\n",
    "Nums    = date_6[\"Label\"].value_counts().values\n",
    "\n",
    "print(f\"{Attacks} Samples in Thursday-15-02-2018 : {Nums}\")\n",
    "# date_3[\"Label\"].value_counts()\n",
    "\n",
    "fig = plt.figure(figsize = (10, 5))\n",
    " \n",
    "# creating the bar plot\n",
    "plt.bar(Attacks, Nums, color=color,\n",
    "        width = 0.4)\n",
    " \n",
    "plt.xlabel(\"Number of Samples\")\n",
    "plt.ylabel(\"Exploitations / Attacks\")\n",
    "plt.title('Total number of Benign and Malicious samples in the dataset')\n",
    "plt.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "creative-hotel",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape of Thursday-15-02-2018 data : (1048575, 80)\n"
     ]
    }
   ],
   "source": [
    "print(f\"Shape of Thursday-15-02-2018 data : {date_6.shape}\")\n",
    "total_date_6 =  date_6.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "declared-stand",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "41651"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "del date_6\n",
    "gc.collect()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "outdoor-malta",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Dst Port</th>\n",
       "      <th>Protocol</th>\n",
       "      <th>Timestamp</th>\n",
       "      <th>Flow Duration</th>\n",
       "      <th>Tot Fwd Pkts</th>\n",
       "      <th>Tot Bwd Pkts</th>\n",
       "      <th>TotLen Fwd Pkts</th>\n",
       "      <th>TotLen Bwd Pkts</th>\n",
       "      <th>Fwd Pkt Len Max</th>\n",
       "      <th>Fwd Pkt Len Min</th>\n",
       "      <th>...</th>\n",
       "      <th>Fwd Seg Size Min</th>\n",
       "      <th>Active Mean</th>\n",
       "      <th>Active Std</th>\n",
       "      <th>Active Max</th>\n",
       "      <th>Active Min</th>\n",
       "      <th>Idle Mean</th>\n",
       "      <th>Idle Std</th>\n",
       "      <th>Idle Max</th>\n",
       "      <th>Idle Min</th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>22</td>\n",
       "      <td>6</td>\n",
       "      <td>22/02/2018 08:26:03</td>\n",
       "      <td>20553406</td>\n",
       "      <td>10</td>\n",
       "      <td>7</td>\n",
       "      <td>1063</td>\n",
       "      <td>1297</td>\n",
       "      <td>744</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>20</td>\n",
       "      <td>1027304.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1027304</td>\n",
       "      <td>1027304</td>\n",
       "      <td>1.952608e+07</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>19526080</td>\n",
       "      <td>19526080</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34989</td>\n",
       "      <td>6</td>\n",
       "      <td>22/02/2018 08:26:24</td>\n",
       "      <td>790</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>848</td>\n",
       "      <td>0</td>\n",
       "      <td>848</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>20</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>500</td>\n",
       "      <td>17</td>\n",
       "      <td>22/02/2018 08:25:10</td>\n",
       "      <td>99745913</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>2500</td>\n",
       "      <td>0</td>\n",
       "      <td>500</td>\n",
       "      <td>500</td>\n",
       "      <td>...</td>\n",
       "      <td>8</td>\n",
       "      <td>4000203.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4000203</td>\n",
       "      <td>4000203</td>\n",
       "      <td>3.191524e+07</td>\n",
       "      <td>3.792787e+07</td>\n",
       "      <td>75584115</td>\n",
       "      <td>7200679</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>500</td>\n",
       "      <td>17</td>\n",
       "      <td>22/02/2018 08:25:10</td>\n",
       "      <td>99745913</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>2500</td>\n",
       "      <td>0</td>\n",
       "      <td>500</td>\n",
       "      <td>500</td>\n",
       "      <td>...</td>\n",
       "      <td>8</td>\n",
       "      <td>4000189.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4000189</td>\n",
       "      <td>4000189</td>\n",
       "      <td>3.191524e+07</td>\n",
       "      <td>3.792788e+07</td>\n",
       "      <td>75584130</td>\n",
       "      <td>7200693</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>500</td>\n",
       "      <td>17</td>\n",
       "      <td>22/02/2018 08:24:59</td>\n",
       "      <td>89481361</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>3000</td>\n",
       "      <td>0</td>\n",
       "      <td>500</td>\n",
       "      <td>500</td>\n",
       "      <td>...</td>\n",
       "      <td>8</td>\n",
       "      <td>4000554.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4000554</td>\n",
       "      <td>4000554</td>\n",
       "      <td>2.137020e+07</td>\n",
       "      <td>1.528109e+07</td>\n",
       "      <td>41990741</td>\n",
       "      <td>7200848</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 80 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Dst Port  Protocol            Timestamp  Flow Duration  Tot Fwd Pkts  \\\n",
       "0        22         6  22/02/2018 08:26:03       20553406            10   \n",
       "1     34989         6  22/02/2018 08:26:24            790             2   \n",
       "2       500        17  22/02/2018 08:25:10       99745913             5   \n",
       "3       500        17  22/02/2018 08:25:10       99745913             5   \n",
       "4       500        17  22/02/2018 08:24:59       89481361             6   \n",
       "\n",
       "   Tot Bwd Pkts  TotLen Fwd Pkts  TotLen Bwd Pkts  Fwd Pkt Len Max  \\\n",
       "0             7             1063             1297              744   \n",
       "1             0              848                0              848   \n",
       "2             0             2500                0              500   \n",
       "3             0             2500                0              500   \n",
       "4             0             3000                0              500   \n",
       "\n",
       "   Fwd Pkt Len Min  ...  Fwd Seg Size Min  Active Mean  Active Std  \\\n",
       "0                0  ...                20    1027304.0         0.0   \n",
       "1                0  ...                20          0.0         0.0   \n",
       "2              500  ...                 8    4000203.0         0.0   \n",
       "3              500  ...                 8    4000189.0         0.0   \n",
       "4              500  ...                 8    4000554.0         0.0   \n",
       "\n",
       "   Active Max  Active Min     Idle Mean      Idle Std  Idle Max  Idle Min  \\\n",
       "0     1027304     1027304  1.952608e+07  0.000000e+00  19526080  19526080   \n",
       "1           0           0  0.000000e+00  0.000000e+00         0         0   \n",
       "2     4000203     4000203  3.191524e+07  3.792787e+07  75584115   7200679   \n",
       "3     4000189     4000189  3.191524e+07  3.792788e+07  75584130   7200693   \n",
       "4     4000554     4000554  2.137020e+07  1.528109e+07  41990741   7200848   \n",
       "\n",
       "    Label  \n",
       "0  Benign  \n",
       "1  Benign  \n",
       "2  Benign  \n",
       "3  Benign  \n",
       "4  Benign  \n",
       "\n",
       "[5 rows x 80 columns]"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_7 = pd.read_csv(\"data/Thursday-22-02-2018_TrafficForML_CICFlowMeter.csv\", low_memory=False)\n",
    "date_7.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "latest-flash",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Benign              1048213\n",
       "Brute Force -Web        249\n",
       "Brute Force -XSS         79\n",
       "SQL Injection            34\n",
       "Name: Label, dtype: int64"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_7[\"Label\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "technical-recognition",
   "metadata": {},
   "outputs": [],
   "source": [
    "# indices = date_5.loc[date_5.Timestamp == \"Timestamp\"].index\n",
    "# date_5_cp = date_5.copy()\n",
    "# date_5_cp = date_5_cp.drop(date_5_cp.index[indices])\n",
    "# date_5_cp[\"Label\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "id": "found-front",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'list'>\n",
      "['Benign', 'Brute Force -Web', 'Brute Force -XSS', 'SQL Injection'] Samples in Thursday-22-02-2018 : [524, 249, 79, 34] and original Benign Samples : 1048213\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "color = [\"g\",\"r\",\"b\",\"y\"]\n",
    "\n",
    "Attacks = date_7[\"Label\"].value_counts().index.to_list()\n",
    "Nums    = date_7[\"Label\"].value_counts().values.tolist()\n",
    "print(type(Nums))\n",
    "Benign_ori = Nums[0]\n",
    "Benign = int(Benign_ori/2000)\n",
    "Nums[0] = Benign\n",
    "print(f\"{Attacks} Samples in Thursday-22-02-2018 : {Nums} and original Benign Samples : {Benign_ori}\")\n",
    "# date_3[\"Label\"].value_counts()\n",
    "\n",
    "fig = plt.figure(figsize = (10, 5))\n",
    " \n",
    "# creating the bar plot\n",
    "plt.bar(Attacks, Nums, color=color,\n",
    "        width = 0.4)\n",
    " \n",
    "plt.xlabel(\"Number of Samples\")\n",
    "plt.ylabel(\"Exploitations / Attacks\")\n",
    "plt.title('Total number of Benign and Malicious samples in the dataset')\n",
    "plt.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "scheduled-newsletter",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape of Thursday-15-02-2018 data : (1048575, 80)\n"
     ]
    }
   ],
   "source": [
    "print(f\"Shape of Thursday-22-02-2018 data : {date_6.shape}\")\n",
    "total_date_6 =  date_6.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "impressive-yesterday",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "41651"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "del date_6\n",
    "gc.collect()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "romantic-health",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Dst Port</th>\n",
       "      <th>Protocol</th>\n",
       "      <th>Timestamp</th>\n",
       "      <th>Flow Duration</th>\n",
       "      <th>Tot Fwd Pkts</th>\n",
       "      <th>Tot Bwd Pkts</th>\n",
       "      <th>TotLen Fwd Pkts</th>\n",
       "      <th>TotLen Bwd Pkts</th>\n",
       "      <th>Fwd Pkt Len Max</th>\n",
       "      <th>Fwd Pkt Len Min</th>\n",
       "      <th>...</th>\n",
       "      <th>Fwd Seg Size Min</th>\n",
       "      <th>Active Mean</th>\n",
       "      <th>Active Std</th>\n",
       "      <th>Active Max</th>\n",
       "      <th>Active Min</th>\n",
       "      <th>Idle Mean</th>\n",
       "      <th>Idle Std</th>\n",
       "      <th>Idle Max</th>\n",
       "      <th>Idle Min</th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>14/02/2018 08:31:01</td>\n",
       "      <td>112641719</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>56320859.5</td>\n",
       "      <td>139.300036</td>\n",
       "      <td>56320958</td>\n",
       "      <td>56320761</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>14/02/2018 08:33:50</td>\n",
       "      <td>112641466</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>56320733.0</td>\n",
       "      <td>114.551299</td>\n",
       "      <td>56320814</td>\n",
       "      <td>56320652</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>14/02/2018 08:36:39</td>\n",
       "      <td>112638623</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>56319311.5</td>\n",
       "      <td>301.934596</td>\n",
       "      <td>56319525</td>\n",
       "      <td>56319098</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>22</td>\n",
       "      <td>6</td>\n",
       "      <td>14/02/2018 08:40:13</td>\n",
       "      <td>6453966</td>\n",
       "      <td>15</td>\n",
       "      <td>10</td>\n",
       "      <td>1239</td>\n",
       "      <td>2273</td>\n",
       "      <td>744</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>32</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>22</td>\n",
       "      <td>6</td>\n",
       "      <td>14/02/2018 08:40:23</td>\n",
       "      <td>8804066</td>\n",
       "      <td>14</td>\n",
       "      <td>11</td>\n",
       "      <td>1143</td>\n",
       "      <td>2209</td>\n",
       "      <td>744</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>32</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 80 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Dst Port  Protocol            Timestamp  Flow Duration  Tot Fwd Pkts  \\\n",
       "0         0         0  14/02/2018 08:31:01      112641719             3   \n",
       "1         0         0  14/02/2018 08:33:50      112641466             3   \n",
       "2         0         0  14/02/2018 08:36:39      112638623             3   \n",
       "3        22         6  14/02/2018 08:40:13        6453966            15   \n",
       "4        22         6  14/02/2018 08:40:23        8804066            14   \n",
       "\n",
       "   Tot Bwd Pkts  TotLen Fwd Pkts  TotLen Bwd Pkts  Fwd Pkt Len Max  \\\n",
       "0             0                0                0                0   \n",
       "1             0                0                0                0   \n",
       "2             0                0                0                0   \n",
       "3            10             1239             2273              744   \n",
       "4            11             1143             2209              744   \n",
       "\n",
       "   Fwd Pkt Len Min  ...  Fwd Seg Size Min  Active Mean  Active Std  \\\n",
       "0                0  ...                 0          0.0         0.0   \n",
       "1                0  ...                 0          0.0         0.0   \n",
       "2                0  ...                 0          0.0         0.0   \n",
       "3                0  ...                32          0.0         0.0   \n",
       "4                0  ...                32          0.0         0.0   \n",
       "\n",
       "   Active Max  Active Min   Idle Mean    Idle Std  Idle Max  Idle Min   Label  \n",
       "0           0           0  56320859.5  139.300036  56320958  56320761  Benign  \n",
       "1           0           0  56320733.0  114.551299  56320814  56320652  Benign  \n",
       "2           0           0  56319311.5  301.934596  56319525  56319098  Benign  \n",
       "3           0           0         0.0    0.000000         0         0  Benign  \n",
       "4           0           0         0.0    0.000000         0         0  Benign  \n",
       "\n",
       "[5 rows x 80 columns]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_8 = pd.read_csv(\"data/Wednesday-14-02-2018_TrafficForML_CICFlowMeter.csv\", low_memory=False)\n",
    "date_8.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "civilian-shipping",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Dst Port</th>\n",
       "      <th>Protocol</th>\n",
       "      <th>Timestamp</th>\n",
       "      <th>Flow Duration</th>\n",
       "      <th>Tot Fwd Pkts</th>\n",
       "      <th>Tot Bwd Pkts</th>\n",
       "      <th>TotLen Fwd Pkts</th>\n",
       "      <th>TotLen Bwd Pkts</th>\n",
       "      <th>Fwd Pkt Len Max</th>\n",
       "      <th>Fwd Pkt Len Min</th>\n",
       "      <th>...</th>\n",
       "      <th>Fwd Seg Size Min</th>\n",
       "      <th>Active Mean</th>\n",
       "      <th>Active Std</th>\n",
       "      <th>Active Max</th>\n",
       "      <th>Active Min</th>\n",
       "      <th>Idle Mean</th>\n",
       "      <th>Idle Std</th>\n",
       "      <th>Idle Max</th>\n",
       "      <th>Idle Min</th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>80</td>\n",
       "      <td>6</td>\n",
       "      <td>21/02/2018 08:33:25</td>\n",
       "      <td>37953</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>135</td>\n",
       "      <td>127</td>\n",
       "      <td>135</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>32</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>500</td>\n",
       "      <td>17</td>\n",
       "      <td>21/02/2018 08:33:06</td>\n",
       "      <td>117573474</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1500</td>\n",
       "      <td>0</td>\n",
       "      <td>500</td>\n",
       "      <td>500</td>\n",
       "      <td>...</td>\n",
       "      <td>8</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>58800000.0</td>\n",
       "      <td>23800000.0</td>\n",
       "      <td>75600000</td>\n",
       "      <td>42000000</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>500</td>\n",
       "      <td>17</td>\n",
       "      <td>21/02/2018 08:33:06</td>\n",
       "      <td>117573474</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1500</td>\n",
       "      <td>0</td>\n",
       "      <td>500</td>\n",
       "      <td>500</td>\n",
       "      <td>...</td>\n",
       "      <td>8</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>58800000.0</td>\n",
       "      <td>23800000.0</td>\n",
       "      <td>75600000</td>\n",
       "      <td>42000000</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>500</td>\n",
       "      <td>17</td>\n",
       "      <td>21/02/2018 08:33:11</td>\n",
       "      <td>99743998</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>2500</td>\n",
       "      <td>0</td>\n",
       "      <td>500</td>\n",
       "      <td>500</td>\n",
       "      <td>...</td>\n",
       "      <td>8</td>\n",
       "      <td>4000290.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4000290</td>\n",
       "      <td>4000290</td>\n",
       "      <td>31900000.0</td>\n",
       "      <td>37900000.0</td>\n",
       "      <td>75600000</td>\n",
       "      <td>7200397</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>500</td>\n",
       "      <td>17</td>\n",
       "      <td>21/02/2018 08:33:11</td>\n",
       "      <td>99743999</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>2500</td>\n",
       "      <td>0</td>\n",
       "      <td>500</td>\n",
       "      <td>500</td>\n",
       "      <td>...</td>\n",
       "      <td>8</td>\n",
       "      <td>4000286.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4000286</td>\n",
       "      <td>4000286</td>\n",
       "      <td>31900000.0</td>\n",
       "      <td>37900000.0</td>\n",
       "      <td>75600000</td>\n",
       "      <td>7200399</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 80 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Dst Port  Protocol            Timestamp  Flow Duration  Tot Fwd Pkts  \\\n",
       "0        80         6  21/02/2018 08:33:25          37953             5   \n",
       "1       500        17  21/02/2018 08:33:06      117573474             3   \n",
       "2       500        17  21/02/2018 08:33:06      117573474             3   \n",
       "3       500        17  21/02/2018 08:33:11       99743998             5   \n",
       "4       500        17  21/02/2018 08:33:11       99743999             5   \n",
       "\n",
       "   Tot Bwd Pkts  TotLen Fwd Pkts  TotLen Bwd Pkts  Fwd Pkt Len Max  \\\n",
       "0             3              135              127              135   \n",
       "1             0             1500                0              500   \n",
       "2             0             1500                0              500   \n",
       "3             0             2500                0              500   \n",
       "4             0             2500                0              500   \n",
       "\n",
       "   Fwd Pkt Len Min  ...  Fwd Seg Size Min  Active Mean  Active Std  \\\n",
       "0                0  ...                32          0.0         0.0   \n",
       "1              500  ...                 8          0.0         0.0   \n",
       "2              500  ...                 8          0.0         0.0   \n",
       "3              500  ...                 8    4000290.0         0.0   \n",
       "4              500  ...                 8    4000286.0         0.0   \n",
       "\n",
       "   Active Max  Active Min   Idle Mean    Idle Std  Idle Max  Idle Min   Label  \n",
       "0           0           0         0.0         0.0         0         0  Benign  \n",
       "1           0           0  58800000.0  23800000.0  75600000  42000000  Benign  \n",
       "2           0           0  58800000.0  23800000.0  75600000  42000000  Benign  \n",
       "3     4000290     4000290  31900000.0  37900000.0  75600000   7200397  Benign  \n",
       "4     4000286     4000286  31900000.0  37900000.0  75600000   7200399  Benign  \n",
       "\n",
       "[5 rows x 80 columns]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_9 = pd.read_csv(\"data/Wednesday-21-02-2018_TrafficForML_CICFlowMeter.csv\", low_memory=False)\n",
    "date_9.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "incoming-banana",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['Benign', 'DDOS attack-LOIC-UDP', 'DDOS attack-HOIC'], dtype=object)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_9[\"Label\"].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "editorial-canyon",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/shahan/.local/lib/python3.8/site-packages/IPython/core/interactiveshell.py:3155: DtypeWarning: Columns (0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78) have mixed types.Specify dtype option on import or set low_memory=False.\n",
      "  has_raised = await self.run_ast_nodes(code_ast.body, cell_name,\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Dst Port</th>\n",
       "      <th>Protocol</th>\n",
       "      <th>Timestamp</th>\n",
       "      <th>Flow Duration</th>\n",
       "      <th>Tot Fwd Pkts</th>\n",
       "      <th>Tot Bwd Pkts</th>\n",
       "      <th>TotLen Fwd Pkts</th>\n",
       "      <th>TotLen Bwd Pkts</th>\n",
       "      <th>Fwd Pkt Len Max</th>\n",
       "      <th>Fwd Pkt Len Min</th>\n",
       "      <th>...</th>\n",
       "      <th>Fwd Seg Size Min</th>\n",
       "      <th>Active Mean</th>\n",
       "      <th>Active Std</th>\n",
       "      <th>Active Max</th>\n",
       "      <th>Active Min</th>\n",
       "      <th>Idle Mean</th>\n",
       "      <th>Idle Std</th>\n",
       "      <th>Idle Max</th>\n",
       "      <th>Idle Min</th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>443</td>\n",
       "      <td>6</td>\n",
       "      <td>28/02/2018 08:22:13</td>\n",
       "      <td>94658</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "      <td>708</td>\n",
       "      <td>3718</td>\n",
       "      <td>387</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>20</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>443</td>\n",
       "      <td>6</td>\n",
       "      <td>28/02/2018 08:22:13</td>\n",
       "      <td>206</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>20</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>445</td>\n",
       "      <td>6</td>\n",
       "      <td>28/02/2018 08:22:15</td>\n",
       "      <td>165505</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>20</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>443</td>\n",
       "      <td>6</td>\n",
       "      <td>28/02/2018 08:22:16</td>\n",
       "      <td>102429</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "      <td>708</td>\n",
       "      <td>3718</td>\n",
       "      <td>387</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>20</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>443</td>\n",
       "      <td>6</td>\n",
       "      <td>28/02/2018 08:22:16</td>\n",
       "      <td>167</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>20</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Benign</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 80 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "  Dst Port Protocol            Timestamp Flow Duration Tot Fwd Pkts  \\\n",
       "0      443        6  28/02/2018 08:22:13         94658            6   \n",
       "1      443        6  28/02/2018 08:22:13           206            2   \n",
       "2      445        6  28/02/2018 08:22:15        165505            3   \n",
       "3      443        6  28/02/2018 08:22:16        102429            6   \n",
       "4      443        6  28/02/2018 08:22:16           167            2   \n",
       "\n",
       "  Tot Bwd Pkts TotLen Fwd Pkts TotLen Bwd Pkts Fwd Pkt Len Max  \\\n",
       "0            7             708            3718             387   \n",
       "1            0               0               0               0   \n",
       "2            1               0               0               0   \n",
       "3            7             708            3718             387   \n",
       "4            0               0               0               0   \n",
       "\n",
       "  Fwd Pkt Len Min  ... Fwd Seg Size Min Active Mean Active Std Active Max  \\\n",
       "0               0  ...               20         0.0        0.0          0   \n",
       "1               0  ...               20         0.0        0.0          0   \n",
       "2               0  ...               20         0.0        0.0          0   \n",
       "3               0  ...               20         0.0        0.0          0   \n",
       "4               0  ...               20         0.0        0.0          0   \n",
       "\n",
       "  Active Min Idle Mean Idle Std Idle Max Idle Min   Label  \n",
       "0          0       0.0      0.0        0        0  Benign  \n",
       "1          0       0.0      0.0        0        0  Benign  \n",
       "2          0       0.0      0.0        0        0  Benign  \n",
       "3          0       0.0      0.0        0        0  Benign  \n",
       "4          0       0.0      0.0        0        0  Benign  \n",
       "\n",
       "[5 rows x 80 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_10 = pd.read_csv(\"data/Wednesday-28-02-2018_TrafficForML_CICFlowMeter.csv\", low_memory=False)\n",
    "date_10.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "labeled-demand",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['Benign', 'Label', 'Infilteration'], dtype=object)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "date_10[\"Label\"].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "oriented-spirit",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "french-politics",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "japanese-quality",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "numerous-satellite",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
